package com.zy.xuanwo.zyc.portal.service;


import com.zy.xuanwo.zyc.portal.bean.ScheduleCreatParameter;
import com.zy.xuanwo.zyc.portal.bean.WxAppParameter;
import com.zy.xuanwo.zyc.portal.callback.DeviceContrlPortalListener;
import com.zy.xuanwo.zyc.portal.callback.DeviceListener;
import com.zy.xuanwo.zyc.portal.callback.GetCommonResultListener;
import com.zy.xuanwo.zyc.portal.callback.LoginListener;
import com.zy.xuanwo.zyc.portal.callback.ProductListener;
import com.zy.xuanwo.zyc.portal.callback.ScheduleCreatListener;
import com.zy.xuanwo.zyc.portal.callback.WxAppListener;

import java.util.HashMap;


public abstract class IportalManager {

    /**
     * remarks:获取邮箱验证码
     *
     * @param type      获取验证码的类型 1 email 2 手机短信 (必传)
     * @param username  邮箱或者手机号码（必传）
     * @param headerMap 请求头
     */
    public abstract void VerificationCode(int type, String username, HashMap<String, String> headerMap,
                                          GetCommonResultListener mCommonResultListener);

    /**
     * 用户注册
     *
     * @param username(必传)
     * @param password(必传)
     * @param verification_code(必传)
     * @param user_type(必传)             用户：user 开发者：developer
     * @param mCommonResultListener(必传)
     */
    public abstract void users(String username, String password, String verification_code, HashMap<String, String> headerMap,
                               String user_type, GetCommonResultListener mCommonResultListener);

    /**
     * 用户登录
     *
     * @param username(必传)
     * @param password(必传)
     * @param mLoginListener(必传)
     */
    public abstract void usersLogin(String username, String password, HashMap<String, String> headerMap, LoginListener mLoginListener);

    /**
     * 密码重置
     *
     * @param username
     * @param password
     * @param headerMap
     */
    public abstract void usersPasswordReset(String username, String password, HashMap<String, String>
            headerMap, GetCommonResultListener commonResultListener);


    /**
     * 修改密码
     *
     * @param username
     * @param password
     * @param new_password
     * @param hashMap
     * @param commonResultListener
     */
    public abstract void usersPassword(String username,String password,String new_password,HashMap<String,String>
            hashMap,GetCommonResultListener commonResultListener);


    /**
     * 注册创建设备
     *
     * @param product_id
     * @param MAC
     * @param secret_key
     * @param alias
     * @param encrypt_method
     * @param headerMap
     * @param mDeviceListener
     */
    public abstract void devices(String product_id, String MAC, String secret_key, String alias, String encrypt_method, HashMap<String, String>
            headerMap, DeviceListener mDeviceListener);

    /**
     * @param product_id
     * @param user_id
     * @param MAC
     * @param secret_key
     * @param bind_mode             绑定模式(1: owner, 2: share, 3: 自动识别,首个绑定为owner, 其余为share).
     * @param encrypt_method
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void devicesBind(String product_id, String user_id, String MAC, String secret_key,
                                     String bind_mode, String encrypt_method, HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * 创建设备组
     *
     * @param name
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void devicesGroups(String name, HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * 添加新设备进组
     *
     * @param group_id
     * @param device_id
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void devicesGroupsMembers(String group_id, String device_id,
                                              HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * @param device_id
     * @param msg
     * @param time
     * @param headerMap
     * @param mCommonResultListener
     */

    public abstract void devicesIn(String device_id, String msg, String time, HashMap<String, String> headerMap,
                                   GetCommonResultListener mCommonResultListener);

    /**
     * 设置设备自定义属性
     *
     * @param device_id
     * @param name
     * @param value
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void devicesProperties(String device_id, String name, String value, HashMap<String, String> headerMap,
                                           GetCommonResultListener mCommonResultListener);

    /**
     * 接触绑定
     *
     * @param device_id
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void devicesUnbind(String device_id, HashMap<String, String> headerMap,
                                       GetCommonResultListener mCommonResultListener);

    /**
     * 产品创建
     *
     * @param name（必传）
     * @param model             产品型号(可选).
     * @param description       产品描述(可选).
     * @param cloud_transcoding 是否转码(可选).
     * @param template_id       产品模板(可选).
     * @param headerMap
     * @param mProductListener
     */
    public abstract void products(String name, String model, String description, boolean
            cloud_transcoding, int template_id, HashMap<String, String> headerMap, ProductListener mProductListener);

    /**
     * @param product_id            产品ID(必须).
     * @param macs                  MAC地址(必须，以换行符分割).
     * @param headerMap
     * @param mCommonResultListener
     */

    public abstract void productsDevicesImport(String product_id, String macs, HashMap<String, String> headerMap,
                                               GetCommonResultListener mCommonResultListener);

    /**
     * @param product_id            产品ID(必须).
     * @param name                  属性名(必须).
     * @param io                    输入/输出(可选，默认为NULL).
     * @param default_value         默认值(可选，默认为NULL).
     * @param display_name          显示名称(可选, 默认为NULL).
     * @param display_widget        显示控件(可选, 默认为NULL).
     * @param type                  数值类型(可选，默认为NULL).
     * @param scope                 面对用户(可选，默认为NULL).
     * @param time_series           时间序列(可选，默认为NULL).
     * @param description           属性描述(可选，默认为NULL).
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void productsProduct_idDatapoints(String product_id, String name, Integer io,
                                                      String default_value, String display_name, String display_widget, String type, String scope,
                                                      Integer time_series, String description, HashMap<String, String> headerMap,
                                                      GetCommonResultListener mCommonResultListener);

    /**
     * @param username              开发者用户名(必须).
     * @param owner_type            用户属性owner/share(必须).
     * @param product_id            PRODUCT ID(必须).
     * @param action_type           操作类型(可选。1:添加;2:转让).
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void developers(String username, String owner_type, String product_id, String action_type,
                                    HashMap<String, String> headerMap,
                                    GetCommonResultListener mCommonResultListener);

    /**
     * @param product_id    产品ID.
     * @param name          触发器名.
     * @param property_name 数据模型属性名(该触发器作用的属性).
     * @param interval      时间间隔(间隔时间为秒，0为立即执行).
     * @param compare_type  比较类型(==, >, >=, <, <=).
     * @param threshold     阈值.
     * @param url           调用 URL(POST).
     */
    public abstract void triggers(String product_id, String name, String property_name, int interval, String compare_type,
                                  int threshold, String url, HashMap<String, String> headerMap,
                                  GetCommonResultListener mCommonResultListener);

    /**
     * @param wxAppParameter
     * @param headerMap
     */
    public abstract void apps(WxAppParameter wxAppParameter, HashMap<String, String> headerMap,
                              WxAppListener mWxAppListener);

    /**
     * @param content               内容(必须).
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void appsFeedback(String content, HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * @param username              登录名(必须).
     * @param owner_type            用户属性owner/share(必须).
     * @param app_id                APPID(必须).
     * @param action_type           操作类型(可选。1:添加;2:转让).
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void appsDevelopers(String username, String owner_type, String app_id, String action_type,
                                        HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * @param verify_code           验证码(必须).
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void authorization(String verify_code, HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * @param username              用户名(必须).
     * @param owner_type            用户属性owner/share(必须).
     * @param device_id             设备ID(必须).
     * @param action_type           操作类型(可选。1:添加;2:转让).
     * @param headerMap
     * @param mCommonResultListener
     */
    public abstract void authorizationDevicesManage(String username, String owner_type, String device_id, String action_type,
                                                    HashMap<String, String> headerMap, GetCommonResultListener mCommonResultListener);

    /**
     * @param secret_key                  设备私钥 必须
     * @param user_id                     用户id 必须
     * @param headerMap
     * @param mDeviceContrlPortalListener
     */
    public abstract void authorizationDevicesToken(String secret_key, String user_id,
                                                   HashMap<String, String> headerMap, DeviceContrlPortalListener mDeviceContrlPortalListener);

    /**
     * @param username  用户名(必须).
     * @param headerMap
     */
    public abstract void authorizationUsers(String username, HashMap<String, String> headerMap,
                                            GetCommonResultListener mGetCommonResultListener);

    /**
     * @param scheduleCreatParameter
     * @param headerMap
     * @param mScheduleCreatListener
     */
    public abstract void scheduleCreate(ScheduleCreatParameter scheduleCreatParameter,
                                        HashMap<String, String> headerMap, ScheduleCreatListener mScheduleCreatListener);

    /**
     * @param id
     * @param name
     * @param mGetCommonResultListener
     */
    public abstract void scheduleDelete(String id, String name, HashMap<String, String> headerMap,
                                        GetCommonResultListener mGetCommonResultListener);

    /**
     * @param schedule_id              调度ID(多个之间用换行符隔开).
     * @param schedule_time            调度时间戳(格式：145678779).
     * @param sent_time                计划任务执时间(格式：2015-04-05 12:00:00).
     * @param headerMap
     * @param mGetCommonResultListener
     */
    public abstract void scheduleLogCreate(String schedule_id, String schedule_time, String sent_time,
                                           HashMap<String, String> headerMap,
                                           GetCommonResultListener mGetCommonResultListener);

    /**
     * @param scheduleCreatParameter
     * @param headerMap
     * @param mGetCommonResultListener
     */
    public abstract void scheduleUpdate(ScheduleCreatParameter scheduleCreatParameter, HashMap<String, String> headerMap,
                                        GetCommonResultListener mGetCommonResultListener);

    /**
     * remarks:取消当前句柄的请求
     *
     * @param cancleHandler
     */
    public abstract void Cancle(String cancleHandler);
}
